#include"add.h"



// CUDA核函数，将向量的每个元素加1
__global__ void vectorAddOne(int* vector, int size) {
    int tid = blockIdx.x * blockDim.x + threadIdx.x;
    if (tid < size) {
        vector[tid] += 1;
    }
}

void vectorAdd(int* vector,int size){
    int* device_vector; // GPU上的向量
    // 在GPU上分配内存
    cudaMalloc((void**)&device_vector, size * sizeof(int));

    // 将数据从主机复制到GPU
    cudaMemcpy(device_vector, vector, size * sizeof(int), cudaMemcpyHostToDevice);

    // 配置CUDA线程块和网格
    int blockSize = 256;
    int gridSize = (size + blockSize - 1) / blockSize;

    // 调用CUDA核函数在GPU上执行向量加1操作
    vectorAddOne<<<gridSize, blockSize>>>(device_vector, size);

    // 将结果从GPU复制回主机
    cudaMemcpy(vector, device_vector, size * sizeof(int), cudaMemcpyDeviceToHost);
    cudaFree(device_vector);
}
